package com.qf.proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class JDKProxy implements InvocationHandler {
    private Object object;

    public JDKProxy(Object object){
        this.object = object;
    }
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("开事务");
        Object invoke = null;

        //method：代表的是要执行的核心功能的方法  args就是执行这个方法时要传入的参数
        try {
            invoke = method.invoke(object, args);
            System.out.println("提交事务");
        } catch (Exception e) {
            System.out.println("回滚事务");
            e.printStackTrace();
        }
        return invoke;
    }
    public Object getProxyInstance(){
        //返回代理对象：和被代理对象实现同一个接口
        return Proxy.newProxyInstance(JDKProxy.class.getClassLoader(), object.getClass().getInterfaces(), this);
    }
}
